<template>
  <div class="nav-menus" :class="configStore.layout.layoutMode">
    <router-link class="h100" target="_blank" title="Home" to="/">
      <div class="nav-menu-item">
        <Icon :color="configStore.getColorVal('headerBarTabColor')" class="nav-menu-icon" name="el-icon-Monitor"
          size="18" />
      </div>
    </router-link>
    <el-dropdown @visible-change="onCurrentNavMenu($event, 'lang')" class="h100" size="large" :hide-timeout="50"
      placement="bottom" trigger="click" :hide-on-click="true">
      <div class="nav-menu-item pt2" :class="state.currentNavMenu == 'lang' ? 'hover' : ''">
        <Icon :color="configStore.getColorVal('headerBarTabColor')" class="nav-menu-icon" name="local-lang" size="18" />
      </div>
      <template #dropdown>
        <el-dropdown-menu class="dropdown-menu-box">
          <el-dropdown-item v-for="item in configStore.lang.langArray" :key="item.name"
            @click="editDefaultLang(item.name)">
            {{ item.value }}
          </el-dropdown-item>
        </el-dropdown-menu>
      </template>
    </el-dropdown>

    <div class="nav-menu-item">
      <el-icon :size="18" :color="configStore.getColorVal('headerBarTabColor')">
        <Search class="nav-menu-icon" />
      </el-icon>
    </div>

    <div class="nav-menu-item">
      <el-icon :size="18" :color="configStore.getColorVal('headerBarTabColor')">
        <Message class="nav-menu-icon" />
      </el-icon>
    </div>

    <div @click="onFullScreen" class="nav-menu-item" :class="state.isFullScreen ? 'hover' : ''">
      <el-icon :size="18" :color="configStore.getColorVal('headerBarTabColor')">
        <FullScreen class="nav-menu-icon" v-if="state.isFullScreen" />
        <FullScreen class="nav-menu-icon" v-else />
      </el-icon>

    </div>

    <el-popover @show="onCurrentNavMenu(true, 'adminInfo')" @hide="onCurrentNavMenu(false, 'adminInfo')"
      placement="bottom-end" :hide-after="0" :width="260" trigger="click" popper-class="admin-info-box">
      <template #reference>
        <div class="admin-info" :class="state.currentNavMenu == 'adminInfo' ? 'hover' : ''">
          <el-avatar :size="25" fit="fill">
            <img :src="avatar" alt="" />
          </el-avatar>
          <div class="admin-name">{{ adminInfo.nickname }}</div>
        </div>
      </template>
      <div>
        <div class="admin-info-base">
          <el-avatar :size="70" fit="fill">
            <img :src="avatar" alt="" />
          </el-avatar>
          <div class="admin-info-other">
            <div class="admin-info-name">{{ adminInfo.nickname }}</div>
            <div class="admin-info-lasttime">{{ adminInfo.lastlogintime }}</div>
          </div>
        </div>
        <div class="admin-info-footer">
          <el-button @click="onAdminInfo" type="primary" plain>{{ 'layouts.personal data' }}</el-button>
          <el-button @click="onLogout" type="danger" plain>{{ 'layouts.cancellation' }}</el-button>
        </div>
      </div>
    </el-popover>
    <div @click="configStore.setLayout('showDrawer', true)" class="nav-menu-item">
      <el-icon :size="18" :color="configStore.getColorVal('headerBarTabColor')">
        <i class="nav-menu-icon fa fa-cogs" />
      </el-icon>
    </div>
    <Config />
    <TerminalVue />
  </div>
</template>

<script setup>
import { reactive, computed } from 'vue'
import { FullScreen, Search, Message } from '@element-plus/icons-vue'

// import { editDefaultLang } from '@/lang'
import screenfull from 'screenfull'
import { useConfig } from '@/stores/config'
import { ElMessage } from 'element-plus'
// import { useI18n } from 'vue-i18n'
import Config from './config.vue'
import { useAdminInfo } from '@/stores/adminInfo'
// import { useTerminal } from '@/stores/terminal'
import { Local, Session } from '@/utils/storage'
import { ADMIN_INFO, BA_ACCOUNT } from '@/stores/constant/cacheKey'
import router from '@/router/index'
// import { routePush } from '@/utils/router'
// import { logout } from '@/api/backend/index'
// import { postClearCache } from '@/api/common'
// import TerminalVue from '@/components/terminal/index.vue'

// const { t } = useI18n()

const avatar = computed(() => {
  return adminInfo.avatar || require('@/images/home_top_head@2x.png');
})

const adminInfo = useAdminInfo()
const configStore = useConfig()
// const terminal = useTerminal()

const state = reactive({
  isFullScreen: false,
  currentNavMenu: '',
  showLayoutDrawer: false,
})

const onCurrentNavMenu = (status, name) => {
  state.currentNavMenu = status ? name : ''
}

const onFullScreen = () => {
  if (!screenfull.isEnabled) {
    ElMessage.warning('layouts.Full screen is not supported')
    return false
  }
  screenfull.toggle()
  screenfull.onchange(() => {
    state.isFullScreen = screenfull.isFullscreen
  })
}

const onAdminInfo = () => {
  routePush({ name: 'routine/adminInfo' })
}

const onLogout = () => {
  // logout().then(() => {
  //     Local.remove(ADMIN_INFO)
  //     router.go(0)
  // })
}

const onClearCache = (type) => {
  if (type == 'storage' || type == 'all') {
    const adminInfo = Local.get(ADMIN_INFO)
    const baAccount = Local.get(BA_ACCOUNT)
    Session.clear()
    Local.clear()
    Local.set(ADMIN_INFO, adminInfo)
    Local.set(BA_ACCOUNT, baAccount)
    if (type == 'storage') return
  }
  // postClearCache(type).then(() => {})
}
</script>

<style scoped>
.nav-menus.Default {
  border-radius: var(--el-border-radius-base);
  box-shadow: var(--el-box-shadow-light);
}

.nav-menus {
  display: flex;
  align-items: center;
  height: 100%;
  margin-left: auto;
  background-color: v-bind('configStore.getColorVal("headerBarBackground")');
  overflow: hidden;
}

.nav-menus .nav-menu-item {
  height: 100%;
  width: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.nav-menus .nav-menu-item .nav-menu-icon {
  box-sizing: content-box;
  color: v-bind('configStore.getColorVal("headerBarTabColor")');
}

.nav-menus .nav-menu-item:hover .icon {
  animation: twinkle 0.3s ease-in-out;
}

.nav-menus .admin-info {
  display: flex;
  height: 100%;
  padding: 0 10px;
  align-items: center;
  cursor: pointer;
  user-select: none;
  color: v-bind('configStore.getColorVal("headerBarTabColor")');
}

.nav-menus .admin-name {
  padding-left: 6px;
  white-space: nowrap;
}

.nav-menus .nav-menu-item:hover,
.nav-menus .admin-info:hover,
.nav-menus .nav-menu-item.hover,
.nav-menus .admin-info.hover {
  background: v-bind('configStore.getColorVal("headerBarHoverBackground")');
}

.dropdown-menu-box :deep(.el-dropdown-menu__item) {
  justify-content: center;
}

.admin-info-base {
  display: flex;
  justify-content: center;
  flex-wrap: wrap;
  padding-top: 10px;
}

.admin-info-base .admin-info-other {
  display: block;
  width: 100%;
  text-align: center;
  padding: 10px 0;
}

.admin-info-base .admin-info-other .admin-info-name {
  font-size: var(--el-font-size-large);
}

.admin-info-footer {
  padding: 10px 0;
  margin: 0 -12px -12px -12px;
  display: flex;
  justify-content: space-around;
}

.pt2 {
  padding-top: 2px;
}

@keyframes twinkle {
  0% {
    transform: scale(0);
  }

  80% {
    transform: scale(1.2);
  }

  100% {
    transform: scale(1);
  }
}
</style>
